#ifndef NODO_H
#define NODO_H
#include <string>
#include <QtCore/QVariant>

using namespace std;

class Residuo;

class Nodo
{
public:
    string fattore;      // stringa binaria ripetuta
    int resto;           // resto mod 3
    Residuo* residui;    // puntatore alla lista dei residui
    string resti;        // stringa binaria dei resti usati

    Nodo(string f, int rs, Residuo* r, string rst); // costruttore
    Nodo(Nodo& x);       // costruttore di copia profonda
    int shift();
    ~Nodo();             // distruttore profondo
};
Q_DECLARE_METATYPE (Nodo*);

class Residuo
{
public:
    int lunghezza;       // lunghezza del residuo
    int resto;           // resto mod 3
    Nodo* continuazione; // puntatore al nodo continuazione
    Residuo* succ;       // puntatore al residuo successivo
    string multipli;     // stringa binaria dei multipli usati

    //Residuo(int l, int rs, Nodo* cn, Residuo* s, string m); // costruttore
    Residuo(int l=1, int rs=1, Nodo* cn=NULL, Residuo* s=NULL, string m=""):
    lunghezza(l),resto(rs),continuazione(cn),succ(s),multipli(m){};
    Residuo(Residuo& x); // costruttore di copia profonda
    ~Residuo();          // distruttore profondo
};
Q_DECLARE_METATYPE (Residuo*);
#endif // NODO_H
